package ar.com.ctrln.control.calendar;

import java.util.Collection;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import ar.com.ctrln.persistence.model.contacto.Contacto;
import ar.com.ctrln.persistence.model.evento.EventoCalendario;
import ar.com.ctrln.persistence.model.evento.EventoCurso;
import ar.com.ctrln.persistence.model.evento.EventoPersonal;
import ar.com.ctrln.persistence.model.evento.EventoReunion;
import ar.com.ctrln.persistence.model.evento.EventoTicket;
import ar.com.ctrln.persistence.model.evento.Participante;
import ar.com.ctrln.persistence.model.evento.TemaEvento;
import ar.com.ctrln.persistence.model.evento.TipoEvento;
import ar.com.ctrln.persistence.model.sistema.cuentas.Autorizacion;
import ar.com.ctrln.persistence.model.sistema.dashboardPpal.Movimiento;
import ar.com.ctrln.services.contacto.GestorContacto;
import ar.com.ctrln.services.evento.GestorEvento;
import ar.com.ctrln.services.evento.GestorTemaEvento;
import ar.com.ctrln.services.evento.GestorTipoEvento;
import ar.com.ctrln.services.participante.GestorParticipante;
import ar.com.ctrln.services.sistema.autorizacion.GestorAutorizacion;
import ar.com.ctrln.services.sistema.principal.GestorMovimiento;

@Controller("registrarEvento")
public class RegistrarEvento {

	public static final int EVENTO_REUNION = 1;
	public static final int EVENTO_CURSO = 2;
	public static final int EVENTO_PERSONAL = 3;
	public static final int EVENTO_TICKET = 4;

	@Autowired
	private GestorEvento gestorEvento;

	@Autowired
	private GestorTipoEvento gestorTipoEvento;

	@Autowired
	private GestorAutorizacion gestorAutorizacion;

	@Autowired
	private GestorContacto gestorContacto;

	@Autowired
	private GestorParticipante gestorParticipante;
	
	@Autowired
	private GestorTemaEvento gestorTemaEvento;
	
	@Autowired
	private GestorMovimiento gestorMovimiento;
	
	private Movimiento movimiento;

	private EventoCalendario eventoCalendario;

	public EventoCalendario getEvento(int e) {

		switch (e) {
		case EVENTO_REUNION:
			if (eventoCalendario == null
					|| !(eventoCalendario instanceof EventoReunion)) {
				eventoCalendario = null;
				eventoCalendario = new EventoReunion();
			}

			return eventoCalendario;

		case EVENTO_CURSO:
			if (eventoCalendario == null
					|| !(eventoCalendario instanceof EventoCurso)) {
				eventoCalendario = null;
				eventoCalendario = new EventoCurso();
			}

			return eventoCalendario;

		case EVENTO_PERSONAL:
			if (eventoCalendario == null
					|| !(eventoCalendario instanceof EventoPersonal)) {
				eventoCalendario = null;
				eventoCalendario = new EventoPersonal();
			}

			return eventoCalendario;

		case EVENTO_TICKET:
			if (eventoCalendario == null
					|| !(eventoCalendario instanceof EventoTicket)) {
				eventoCalendario = null;
				eventoCalendario = new EventoTicket();
			}

			return eventoCalendario;
		default:
			return null;
		}

	}

	public EventoCalendario getEvento() {
		return eventoCalendario;
	}

	public void nuevoEvento(EventoCalendario evento) {
		gestorEvento.nuevoEvento(evento);		
		
		//informo el nuevo movimiento a la pantalla principal...		
		movimiento = gestorMovimiento.nuevoMovimiento("Nuevo evento "+evento.getFechaInicioString()+", "+evento.getHoraInicioString()+": "+evento.getTipoEvento().getNombre(), 4, evento.getId());
		gestorMovimiento.guardar(movimiento);
	}

	public Autorizacion buscarAutorizacion(String autorizacion) {
		return gestorAutorizacion.getAutorizacion(autorizacion);
	}

	public List<TipoEvento> listarTiposEventos() {
		return gestorTipoEvento.listarTipos();
	}

	public List<Contacto> listarContactos() {
		return gestorContacto.listarContactos();
	}

	public void nuevoParticipante(Participante participante) {
		gestorParticipante.guardar(participante);
	}

	public void nuevoParticipante(Collection<Participante> participantes) {
		for (Participante participante : participantes) {
			gestorParticipante.guardar(participante);
		}

	}
	
	public void actualizarTemaEvento(TemaEvento temaEvento){
		gestorTemaEvento.actualizar(temaEvento);
	}

}
